home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 97 / CD-ROM 97 / CD-ROM 97.iso / internet / ghostzilla / ghsetup.exe / chrome / comm.jar / content / communicator / search / shared.js < prev   
Encoding:
Text File  |  2002-04-10  |  11.3 KB  |  370 lines

  1.  
  2.  
  3.  
  4. function fillContextMenu(name, treeName)
  5. {
  6.     if (!name)    return(false);
  7.     var popupNode = document.getElementById(name);
  8.     if (!popupNode)    return(false);
  9.     // remove the menu node (which tosses all of its kids);
  10.     // do this in case any old command nodes are hanging around
  11.   while (popupNode.childNodes.length)
  12.   {
  13.     popupNode.removeChild(popupNode.childNodes[0]);
  14.   }
  15.  
  16.     var treeNode = document.getElementById(treeName);
  17.     if (!treeNode)    return(false);
  18.     var db = treeNode.database;
  19.     if (!db)    return(false);
  20.  
  21.     var compositeDB = db.QueryInterface(Components.interfaces.nsIRDFDataSource);
  22.     if (!compositeDB)    return(false);
  23.  
  24.     var isupports = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
  25.     if (!isupports)    return(false);
  26.     var rdf = isupports.QueryInterface(Components.interfaces.nsIRDFService);
  27.     if (!rdf)    return(false);
  28.  
  29.     var target_item = document.popupNode.parentNode.parentNode;
  30.     if (target_item && target_item.nodeName == "treeitem")
  31.     {
  32.       if (target_item.getAttribute('selected') != 'true') {
  33.         treeNode.selectItem(target_item);
  34.       }
  35.     }
  36.  
  37.     var select_list = treeNode.selectedItems;
  38.  
  39.     var separatorResource = rdf.GetResource("http://home.netscape.com/NC-rdf#BookmarkSeparator");
  40.     if (!separatorResource) return(false);
  41.  
  42.     // perform intersection of commands over selected nodes
  43.     var cmdArray = new Array();
  44.     var selectLength = select_list.length;
  45.     if (selectLength == 0)  selectLength = 1;
  46.     for (var nodeIndex=0; nodeIndex < selectLength; nodeIndex++)
  47.     {
  48.       var id = null;
  49.  
  50.   // if nothing is selected, get commands for the "ref" of the tree root
  51.       if (select_list.length == 0)
  52.       {
  53.     id = treeNode.getAttribute("ref");
  54.           if (!id)    break;
  55.       }
  56.       else
  57.       {
  58.           var node = select_list[nodeIndex];
  59.           if (!node)    break;
  60.           id = node.getAttribute("id");
  61.           if (!id)    break;
  62.   }
  63.  
  64.         var rdfNode = rdf.GetResource(id);
  65.         if (!rdfNode)    break;
  66.         var cmdEnum = db.GetAllCmds(rdfNode);
  67.         if (!cmdEnum)    break;
  68.  
  69.         var nextCmdArray = new Array();
  70.         while (cmdEnum.hasMoreElements())
  71.         {
  72.             var cmd = cmdEnum.getNext();
  73.             if (!cmd)    break;
  74.             if (nodeIndex == 0)
  75.             {
  76.                 cmdArray[cmdArray.length] = cmd;
  77.             }
  78.             else
  79.             {
  80.                 nextCmdArray[cmdArray.length] = cmd;
  81.             }
  82.         }
  83.         if (nodeIndex > 0)
  84.         {
  85.             // perform command intersection calculation
  86.             for (var cmdIndex = 0; cmdIndex < cmdArray.length; cmdIndex++)
  87.             {
  88.                 var    cmdFound = false;
  89.                 for (var nextCmdIndex = 0; nextCmdIndex < nextCmdArray.length; nextCmdIndex++)
  90.                 {
  91.                     if (nextCmdArray[nextCmdIndex] == cmdArray[cmdIndex])
  92.                     {
  93.                         cmdFound = true;
  94.                         break;
  95.                     }
  96.                 }
  97.                 if ((cmdFound == false) && (cmdArray[cmdIndex]))
  98.                 {
  99.       var cmdResource = cmdArray[cmdIndex].QueryInterface(Components.interfaces.nsIRDFResource);
  100.                   if ((cmdResource) && (cmdResource != separatorResource))
  101.                   {
  102.         cmdArray[cmdIndex] = null;
  103.       }
  104.                 }
  105.             }
  106.         }
  107.     }
  108.  
  109.     // need a resource to ask RDF for each command's name
  110.     var rdfNameResource = rdf.GetResource("http://home.netscape.com/NC-rdf#Name");
  111.     if (!rdfNameResource)        return(false);
  112.  
  113.     // build up menu items
  114.     if (cmdArray.length < 1)    return(false);
  115.  
  116.     var lastWasSep = false;
  117.  
  118.     for (var cmdIndex = 0; cmdIndex < cmdArray.length; cmdIndex++)
  119.     {
  120.         var cmd = cmdArray[cmdIndex];
  121.         if (!cmd)        continue;
  122.         var cmdResource = cmd.QueryInterface(Components.interfaces.nsIRDFResource);
  123.         if (!cmdResource)    break;
  124.  
  125.   // handle separators
  126.   if (cmdResource == separatorResource)
  127.   {
  128.     if (lastWasSep != true)
  129.     {
  130.       lastWasSep = true;
  131.             var menuItem = document.createElement("menuseparator");
  132.             popupNode.appendChild(menuItem);
  133.     }
  134.     continue;
  135.   }
  136.  
  137.   lastWasSep = false;
  138.  
  139.         var cmdNameNode = compositeDB.GetTarget(cmdResource, rdfNameResource, true);
  140.         if (!cmdNameNode)    break;
  141.         cmdNameLiteral = cmdNameNode.QueryInterface(Components.interfaces.nsIRDFLiteral);
  142.         if (!cmdNameLiteral)    break;
  143.         cmdName = cmdNameLiteral.Value;
  144.         if (!cmdName)        break;
  145.  
  146.         var menuItem = document.createElement("menuitem");
  147.         menuItem.setAttribute("label", cmdName);
  148.         popupNode.appendChild(menuItem);
  149.         // work around bug # 26402 by setting "oncommand" attribute AFTER appending menuitem
  150.         menuItem.setAttribute("oncommand", "return doContextCmd('" + cmdResource.Value + "', '" + treeName + "');");
  151.     }
  152.  
  153.   // strip off leading/trailing menuseparators
  154.   while (popupNode.childNodes.length > 0)
  155.   {
  156.     if (popupNode.childNodes[0].tagName != "menuseparator")
  157.       break;
  158.     popupNode.removeChild(popupNode.childNodes[0]);
  159.   }
  160.   while (popupNode.childNodes.length > 0)
  161.   {
  162.     if (popupNode.childNodes[popupNode.childNodes.length - 1].tagName != "menuseparator")
  163.       break;
  164.     popupNode.removeChild(popupNode.childNodes[popupNode.childNodes.length - 1]);
  165.   }
  166.  
  167.   var   searchMode = 0;
  168.   if (pref) searchMode = pref.getIntPref("browser.search.mode");
  169.   if (pref && bundle)
  170.   {
  171.     // then add a menu separator (if necessary)
  172.     if (popupNode.childNodes.length > 0)
  173.     {
  174.       if (popupNode.childNodes[popupNode.childNodes.length - 1].tagName != "menuseparator")
  175.       {
  176.           var menuSep = document.createElement("menuseparator");
  177.           popupNode.appendChild(menuSep);
  178.       }
  179.     }
  180.     // And then add a "Search Mode" menu item
  181.     var propMenuName = (searchMode == 0) ? bundle.GetStringFromName("enableAdvanced") : bundle.GetStringFromName("disableAdvanced");
  182.     var menuItem = document.createElement("menuitem");
  183.     menuItem.setAttribute("label", propMenuName);
  184.     popupNode.appendChild(menuItem);
  185.     // Work around bug # 26402 by setting "oncommand" attribute
  186.     // AFTER appending menuitem
  187.     menuItem.setAttribute("oncommand", "return setSearchMode();");
  188.   }
  189.  
  190.     return(true);
  191. }
  192.  
  193.  
  194.  
  195. function setSearchMode()
  196. {
  197.   var   searchMode = 0;
  198.   if (pref) searchMode = pref.getIntPref("browser.search.mode");
  199.   if (searchMode == 0)  searchMode = 1;
  200.   else      searchMode = 0;
  201.   if (pref) pref.setIntPref("browser.search.mode", searchMode);
  202.   return(true);
  203. }
  204.  
  205.  
  206.  
  207. function doContextCmd(cmdName, treeName)
  208. {
  209.   var treeNode = document.getElementById(treeName);
  210.   if (!treeNode)    return(false);
  211.   var db = treeNode.database;
  212.   if (!db)    return(false);
  213.  
  214.   var compositeDB = db.QueryInterface(Components.interfaces.nsIRDFDataSource);
  215.   if (!compositeDB)    return(false);
  216.  
  217.   var isupports = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService();
  218.   if (!isupports)    return(false);
  219.   var rdf = isupports.QueryInterface(Components.interfaces.nsIRDFService);
  220.   if (!rdf)    return(false);
  221.  
  222.   // need a resource for the command
  223.   var cmdResource = rdf.GetResource(cmdName);
  224.   if (!cmdResource)        return(false);
  225.   cmdResource = cmdResource.QueryInterface(Components.interfaces.nsIRDFResource);
  226.   if (!cmdResource)        return(false);
  227.  
  228.   // set up selection nsISupportsArray
  229.   var selectionInstance = Components.classes["@mozilla.org/supports-array;1"].createInstance();
  230.   var selectionArray = selectionInstance.QueryInterface(Components.interfaces.nsISupportsArray);
  231.  
  232.   // set up arguments nsISupportsArray
  233.   var argumentsInstance = Components.classes["@mozilla.org/supports-array;1"].createInstance();
  234.   var argumentsArray = argumentsInstance.QueryInterface(Components.interfaces.nsISupportsArray);
  235.  
  236.   // get argument (parent)
  237.   var parentArc = rdf.GetResource("http://home.netscape.com/NC-rdf#parent");
  238.   if (!parentArc)        return(false);
  239.  
  240.   var select_list = treeNode.selectedItems;
  241.   if (select_list.length < 1)
  242.   {
  243.     // if nothing is selected, default to using the "ref" on the root of the tree
  244.     var uri = treeNode.getAttribute("ref");
  245.     if (!uri || uri=="")    return(false);
  246.     var rdfNode = rdf.GetResource(uri);
  247.     // add node into selection array
  248.     if (rdfNode)
  249.     {
  250.       selectionArray.AppendElement(rdfNode);
  251.     }
  252.   }
  253.   else for (var nodeIndex=0; nodeIndex<select_list.length; nodeIndex++)
  254.   {
  255.     var node = select_list[nodeIndex];
  256.     if (!node)    break;
  257.     var uri = node.getAttribute("ref");
  258.     if ((uri) || (uri == ""))
  259.     {
  260.       uri = node.getAttribute("id");
  261.     }
  262.     if (!uri)    return(false);
  263.  
  264.     var rdfNode = rdf.GetResource(uri);
  265.     if (!rdfNode)    break;
  266.  
  267.     // add node into selection array
  268.     selectionArray.AppendElement(rdfNode);
  269.  
  270.     // get the parent's URI
  271.     var parentURI="";
  272.     var theParent = node;
  273.     while (theParent)
  274.     {
  275.       theParent = theParent.parentNode;
  276.  
  277.       parentURI = theParent.getAttribute("ref");
  278.       if ((!parentURI) || (parentURI == ""))
  279.       {
  280.         parentURI = theParent.getAttribute("id");
  281.       }
  282.       if (parentURI != "")  break;
  283.     }
  284.     if (parentURI == "")    return(false);
  285.  
  286.     var parentNode = rdf.GetResource(parentURI, true);
  287.     if (!parentNode)  return(false);
  288.  
  289.     // add parent arc and node into arguments array
  290.     argumentsArray.AppendElement(parentArc);
  291.     argumentsArray.AppendElement(parentNode);
  292.   }
  293.  
  294.   // do the command
  295.   compositeDB.DoCommand( selectionArray, cmdResource, argumentsArray );
  296.   return(true);
  297. }
  298.  
  299.  
  300.  
  301. /* Note: doSort() does NOT support natural order sorting, unless naturalOrderResource is valid,
  302.          in which case we sort ascending on naturalOrderResource
  303.  */
  304. function doSort(sortColName, naturalOrderResource)
  305. {
  306.   var node = document.getElementById(sortColName);
  307.   // determine column resource to sort on
  308.   var sortResource = node.getAttribute('resource');
  309.   if (!sortResource) return(false);
  310.  
  311.   var sortDirection="ascending";
  312.   var isSortActive = node.getAttribute('sortActive');
  313.   if (isSortActive == "true")
  314.   {
  315.     sortDirection = "ascending";
  316.  
  317.     var currentDirection = node.getAttribute('sortDirection');
  318.     if (currentDirection == "ascending")
  319.     {
  320.       if (sortResource != naturalOrderResource)
  321.       {
  322.         sortDirection = "descending";
  323.       }
  324.     }
  325.     else if (currentDirection == "descending")
  326.     {
  327.       if (naturalOrderResource != null && naturalOrderResource != "")
  328.       {
  329.         sortResource = naturalOrderResource;
  330.       }
  331.     }
  332.   }
  333.  
  334.   var isupports = Components.classes["@mozilla.org/xul/xul-sort-service;1"].getService();
  335.   if (!isupports)    return(false);
  336.   var xulSortService = isupports.QueryInterface(Components.interfaces.nsIXULSortService);
  337.   if (!xulSortService)    return(false);
  338.   try
  339.   {
  340.     xulSortService.Sort(node, sortResource, sortDirection);
  341.   }
  342.   catch(ex)
  343.   {
  344.     debug("Exception calling xulSortService.Sort()");
  345.   }
  346.   return(true);
  347. }
  348.  
  349.  
  350.  
  351. function setInitialSort(node, sortDirection)
  352. {
  353.   // determine column resource to sort on
  354.   var sortResource = node.getAttribute('resource');
  355.   if (!sortResource) return(false);
  356.  
  357.   try
  358.   {
  359.     var isupports = Components.classes["@mozilla.org/xul/xul-sort-service;1"].getService();
  360.     if (!isupports)    return(false);
  361.     var xulSortService = isupports.QueryInterface(Components.interfaces.nsIXULSortService);
  362.     if (!xulSortService)    return(false);
  363.     xulSortService.Sort(node, sortResource, sortDirection);
  364.   }
  365.   catch(ex)
  366.   {
  367.   }
  368.   return(true);
  369. }
  370.